/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.entity;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Clase que representa los datos de la tarjeta de crédito.
 * @author jsanchez
 */
@Entity
@Table(name="datos_tarjeta")
public class DatosTarjeta implements Serializable, Cloneable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_DATOSTARJETA")
    @SequenceGenerator(name = "SEQ_DATOSTARJETA", allocationSize = 1, sequenceName = "datostarjeta_seq")
    private Long idDatosTarjeta;
    private String nombresApellidos;
    private String numeroTarjeta;
    private String codigoSeguridad;
    
    @Temporal(TemporalType.DATE)
    private Date fechaExpiracion;
    private int cuotas;

    /**
     * Construye los datos con cuotas = 1
     */
    public DatosTarjeta() {
        this.cuotas = 1;
    }

    /**
     * OBtiene el codigo de seguridad
     * @return String
     */
    public String getCodigoSeguridad() {
        return codigoSeguridad;
    }

    /**
     * Coloca el codigo de seguridad
     * @param codigoSeguridad
     */
    public void setCodigoSeguridad(String codigoSeguridad) {
        this.codigoSeguridad = codigoSeguridad;
    }

    /**
     * Obtiene las cuotas
     * @return int
     */
    public int getCuotas() {
        return cuotas;
    }

    /**
     * Coloca las cuotas
     * @param cuotas
     */
    public void setCuotas(int cuotas) {
        this.cuotas = cuotas;
    }

    /**
     * Obtiene la fecha de expiración
     * @return Date
     */
    public Date getFechaExpiracion() {
        return fechaExpiracion;
    }

    /**
     * Coloca la fecha de expiracion
     * @param fechaExpiracion
     */
    public void setFechaExpiracion(Date fechaExpiracion) {
        this.fechaExpiracion = fechaExpiracion;
    }

    /**
     * Obtiene los nombres y apellidos
     * @return String
     */
    public String getNombresApellidos() {
        return nombresApellidos;
    }

    /**
     * Coloca los nombres y apellidos.
     * @param nombresApellidos
     */
    public void setNombresApellidos(String nombresApellidos) {
        this.nombresApellidos = nombresApellidos;
    }

    /**
     * Obtiene el numero de la tarjeta
     * @return String
     */
    public String getNumeroTarjeta() {
        return numeroTarjeta;
    }

    /**
     * Coloca el numero de la tarjeta
     * @param numeroTarjeta
     */
    public void setNumeroTarjeta(String numeroTarjeta) {
        this.numeroTarjeta = numeroTarjeta;
    }

    /**
     * Obtiene el Id
     * @return Long
     */
    public Long getIdDatosTarjeta() {
        return idDatosTarjeta;
    }

    /**
     * Coloca el Id
     * @param idDatosTarjeta
     */
    public void setIdDatosTarjeta(Long idDatosTarjeta) {
        this.idDatosTarjeta = idDatosTarjeta;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        DatosTarjeta dt = new DatosTarjeta();
        dt.setCodigoSeguridad(this.getCodigoSeguridad());
        dt.setCuotas(this.getCuotas());
        dt.setFechaExpiracion(this.getFechaExpiracion());
        dt.setIdDatosTarjeta(this.getIdDatosTarjeta());
        dt.setNombresApellidos(this.nombresApellidos);
        dt.setNumeroTarjeta(this.getNumeroTarjeta());
        return dt;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj != null && obj instanceof DatosTarjeta &&
                this.getIdDatosTarjeta() != null &&
                ((DatosTarjeta)obj).getIdDatosTarjeta() != null)
            return this.getIdDatosTarjeta().equals(((DatosTarjeta)obj).getIdDatosTarjeta());
        return false;
    }

    @Override
    public int hashCode() {
        if(this.getIdDatosTarjeta() == null)
            return 0;
        return this.getIdDatosTarjeta().hashCode();
    }
}